﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace Mapping.Seguridad
{
    public static class MappingUsuarios
    {
        public static List<Entidades.Seguridad.Usuario> ConsultarUsuarios()
        {
            SqlCommand cmdUsuarios = new SqlCommand();
            cmdUsuarios.CommandText = "sp_ConsultarUsuarios";
            cmdUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            SqlDataReader drUsuarios = cmdUsuarios.ExecuteReader();
            List<Entidades.Seguridad.Usuario> ColUsuarios = new List<Entidades.Seguridad.Usuario>();

            while (drUsuarios.Read())
            {
                Entidades.Seguridad.Usuario oUsuario = new Entidades.Seguridad.Usuario();
                oUsuario.IdUsuario = drUsuarios[0].ToString();
                oUsuario.NombreApellido = drUsuarios[1].ToString();
                oUsuario.Clave = drUsuarios[2].ToString();
                oUsuario.Estado = Convert.ToBoolean(drUsuarios[3]);
                oUsuario.Email = drUsuarios[4].ToString();

                SqlCommand cmd2Usuarios = new SqlCommand();
                cmd2Usuarios.CommandText = "sp_ConsultarUsuariosGrupos";
                cmd2Usuarios.CommandType = System.Data.CommandType.StoredProcedure;
                cmd2Usuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmd2Usuarios.Parameters.Add("@IdUsuario", System.Data.SqlDbType.VarChar, 15).Value = oUsuario.IdUsuario;
                SqlDataReader drUsuariosGrupos = cmd2Usuarios.ExecuteReader();

                while (drUsuariosGrupos.Read())
                {
                    Entidades.Seguridad.Grupo oGrupo = new Entidades.Seguridad.Grupo();
                    oGrupo.IdGrupo = (drUsuariosGrupos["Id_Grupo"]).ToString();
                    oGrupo.Descripcion = drUsuariosGrupos["Descripcion"].ToString();
                    //oGrupo.Estado = Convert.ToByte(drUsuariosGrupos["Estado"]);
                    oUsuario.AgregarGrupo(oGrupo);
                }

                ColUsuarios.Add(oUsuario);
            }

            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return ColUsuarios;

        }

        public static int AgregarUsuario(Entidades.Seguridad.Usuario oUsuario)
        {
            SqlCommand cmdUsuarios = new SqlCommand();
            cmdUsuarios.CommandText = "sp_AgregarUsuario";
            cmdUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdUsuarios.Parameters.Add("@IdUsuario",System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
            cmdUsuarios.Parameters.Add("@Apellido",System.Data.SqlDbType.VarChar).Value = oUsuario.NombreApellido;
            cmdUsuarios.Parameters.Add("@Estado",System.Data.SqlDbType.Bit).Value = oUsuario.Estado;
            cmdUsuarios.Parameters.Add("@Clave", System.Data.SqlDbType.VarChar).Value = oUsuario.Clave;
            cmdUsuarios.Parameters.Add("@Email", System.Data.SqlDbType.VarChar).Value = oUsuario.Email;

            int nro = Convert.ToInt32(cmdUsuarios.ExecuteScalar());
            foreach (Entidades.Seguridad.Grupo grupoo in oUsuario.Grupos)
            {
                SqlCommand cmdGruposUsuarios = new SqlCommand();
                cmdGruposUsuarios.CommandText = "sp_AgregarGrupoUsuario";
                cmdGruposUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
                cmdGruposUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdGruposUsuarios.Parameters.Add("@IdUsuario",System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
                cmdGruposUsuarios.Parameters.Add("@IdGrupo", System.Data.SqlDbType.VarChar).Value = grupoo.IdGrupo;
                cmdGruposUsuarios.ExecuteNonQuery();
            }
            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return nro;
        }

        public static bool EliminarUsuario(Entidades.Seguridad.Usuario oUsuario)
        {

            SqlCommand cmdGruposUsuarios = new SqlCommand();
            cmdGruposUsuarios.CommandText = "sp_EliminarGrupoUsuario";
            cmdGruposUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdGruposUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdGruposUsuarios.Parameters.Add("@IdUsuario",System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
            cmdGruposUsuarios.ExecuteNonQuery();
            
            
            SqlCommand cmdUsuarios = new SqlCommand();
            cmdUsuarios.CommandText = "sp_EliminarUsuario";
            cmdUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
            cmdUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdUsuarios.Parameters.Add("@IdUsuario", System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
            cmdUsuarios.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return true;
        }



        public static int ModificarUsuario(Entidades.Seguridad.Usuario oUsuario)
        {
            SqlCommand cmdUsuarios = new SqlCommand();
            cmdUsuarios.CommandText = "sp_ModificarUsuario";
            cmdUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Seguridad");
            cmdUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdUsuarios.Parameters.Add("@IdUsuario", System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
            cmdUsuarios.Parameters.Add("@Apellido", System.Data.SqlDbType.VarChar).Value = oUsuario.NombreApellido;
            cmdUsuarios.Parameters.Add("@Estado", System.Data.SqlDbType.Bit).Value = oUsuario.Estado;
            cmdUsuarios.Parameters.Add("@Clave", System.Data.SqlDbType.VarChar).Value = oUsuario.Clave;
            cmdUsuarios.Parameters.Add("@Email", System.Data.SqlDbType.VarChar).Value = oUsuario.Email;
            int nro = Convert.ToInt32(cmdUsuarios.ExecuteScalar());

            SqlCommand cmdEliminarGruposUsuarios = new SqlCommand();
            cmdEliminarGruposUsuarios.CommandText = "sp_EliminarGruposUsuarios";
            cmdEliminarGruposUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarGruposUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarGruposUsuarios.Parameters.Add("@IdUsuario", System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
            cmdEliminarGruposUsuarios.ExecuteNonQuery();

            foreach (Entidades.Seguridad.Grupo grupoo in oUsuario.Grupos)
            {
                                
                SqlCommand cmdGruposUsuarios = new SqlCommand();
                cmdGruposUsuarios.CommandText = "sp_AgregarGrupoUsuario";
                cmdGruposUsuarios.CommandType = System.Data.CommandType.StoredProcedure;
                cmdGruposUsuarios.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdGruposUsuarios.Parameters.Add("@IdUsuario", System.Data.SqlDbType.VarChar).Value = oUsuario.IdUsuario;
                cmdGruposUsuarios.Parameters.Add("@IdGrupo", System.Data.SqlDbType.VarChar).Value = grupoo.IdGrupo;
                cmdGruposUsuarios.ExecuteNonQuery();
            }
            Servicios.Conexion.ObtenerInstancia().Desconectar("Seguridad");
            return nro;
        }

    }
}
